package controller;

import dao.FuncionarioDAO;
import dao.LogradouroDAO;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.FuncionarioMODEL;
import model.LogradouroMODEL;
import table.funcionario.FuncionarioTable;
import utilitarios.Data;
import utilitarios.Sexo;

/**
 *
 * @author Welisson
 */
public class FuncionarioController extends GenericController {

    public int salvar(String nome, String cpf, String rg, String nasc, String sexo, String cep, String senha, List<String> emails,
            String telCel, String telRes, String telCom, String num, FuncionarioTable tableModel) {

        FuncionarioMODEL funcionario = new FuncionarioMODEL(
                nome, cpf, rg, Data.stringToDate(nasc), Sexo.sexoToLetra(sexo), Integer.parseInt(cep), senha,
                emails, telCel, telRes, telCom, Integer.parseInt(num));

        int id;
        try {
            id = new FuncionarioDAO().insert(funcionario);
            if (id != -1) {
                funcionario.setId(id);
                tableModel.addFuncionario(funcionario, new LogradouroDAO().getLogradouro(funcionario.getCep()));
            }

        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
            return -1;
        }
        return id;
    }

    public boolean alterar(String id, String nome, String cpf, String rg, String nasc, String sexo, String cep, String senha, List<String> emails,
            String telCel, String telRes, String telCom, String num, FuncionarioTable tableModel, int linhaSelecionada) {

        FuncionarioMODEL funcionario = new FuncionarioMODEL(Integer.parseInt(id),
                nome, cpf, rg, Data.stringToDate(nasc), Sexo.sexoToLetra(sexo), Integer.parseInt(cep), senha,
                emails, telCel, telRes, telCom, Integer.parseInt(num));
        boolean ok;
        try {
            ok = new FuncionarioDAO().update(funcionario);
            if (ok) {
                tableModel.updateFuncionario(linhaSelecionada, funcionario);
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
            ok = false;
        }
        return ok;
    }

    public boolean excluir(int id, FuncionarioTable tableModel, int linhaSelecionada) {
        boolean ok;
        try {
            ok = new FuncionarioDAO().delete(id);
            if (ok) {
                tableModel.removeFuncionario(linhaSelecionada);
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
            ok = false;
        }
        return ok;
    }

    public List<FuncionarioMODEL> listar() {
        try {
            return new FuncionarioDAO().select();
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
            List<FuncionarioMODEL> func = new ArrayList<>();
            return func;
        }
    }

    public LogradouroMODEL getLougradouro(int cep) {
        LogradouroMODEL log = new LogradouroMODEL();
        try {
            log = new LogradouroDAO().getLogradouro(cep);
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
        return log;
    }

    public boolean existeCPF(String cpf) {
        try {
            return new FuncionarioDAO().findByCPF(cpf);
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
            return false;
        }
    }
}
